[Genuino 101][Johnny-Five] マトリックス LED の制御
車輪開発大好きおたいがです。こんにちは。( 挨拶 )
今回は Genuino 101 ( 以下 Genuino ) と Johnny-Five を使用したマトリックス LEDの制御についてまとめてみました。
Johnny-Five の一部 API では、特定メーカーのデバイスやドライバが明示的にサポートされており、闇雲にパーツを購入すると後で泣きを見ることがあります。そして、今回使用する Led.Matrix クラスでは、MAX7219, HT16K33 といった LED ドライバがサポートされているので、後者の HT16K33 を利用することにしました。
動作環境・道具など
- Genuino 101
- USB ケーブル
- ジャンパーワイヤ
- Adafruit I2C 通信の 8x8 1.2インチ LED マトリックス基板 ( 赤色 )
- はんだ+こて
- Windows 7 Pro (64bit)
- Arduino IDE 1.6.9 ( セットアップ記事を参考にしてください )
- Node.js v4.4.7
マトリックス LED の組み立て
購入したマトリックス LED 基板は組立キットなので、自前で工作する必要があります。内容物は以下になります。
- LED 動作基板 (HT16K33)
- 8x8 マトリックス LED
- 6 ピンヘッダ ( ちぎって 4 ピンにする )
これを
こんな感じにはんだ付けします。4 ピンヘッダ、マトリックス LED の接続方向を間違えると悲惨なことになるので要注意です。( 一回やらかしたので基盤を焦がしてしまいました… )
回路図
配線はシンプルです。Genuino の電源、GND、そして 2 本の I2C ピン ( SDA と SCL ) をそれぞれ LED 基板に接続します。
サンプルスケッチ ( プログラム ) をボードに書き込む
Genuino に StandardFirmata スケッチを書き込みます。
( 参照 : https://dev.classmethod.jp/hardware/johnny-five-genuino-101-debut/#toc--- )
Johnny-Five 実行用のサンプルプロジェクト作成および実行
Johnny-Five の導入および実行するためのプロジェクトを用意します。任意のプロジェクトディレクトリを作成して移動したあとに、下記コマンドを入力します。
package.json の初期化
$npm init
Johnny-Five のダウンロード
$npm install johnny-five
サンプルコードの作成
var five = require('johnny-five'); // Genuino が接続されているポート番号 ( `/dev/tty*` (Mac/Linux) or `COM*` (Windows) ) var board = new five.Board({ 'port': 'COM8' }); board.on('ready', function() { var heart = [ '01100110', '10011001', '10000001', '10000001', '01000010', '00100100', '00011000', '00000000' ]; // 文字列のリストで各行の点灯情報を渡す場合 // 1 と 0 の組合せで構築 var data1 = [ '01010101', '10101010', '01010101', '10101010', '01010101', '10101010', '01010101', '10101010' ]; // 整数のリストで各行の点灯情報を渡す場合 // 渡した整数の 2 進数表記が各行の点灯情報となる var data2 = [ 0xAA, //10101010 0x55, //01010101 0xAA, //10101010 0x55, //01010101 0xAA, //10101010 0x55, //01010101 0xAA, //10101010 0x55 //01010101 ]; var matrix = new five.Led.Matrix({ 'controller' : 'HT16K33', 'rotation' : 3 // 180 度反転 }); this.repl.inject({ 'm' : matrix, 'test1' : data1, 'test2' : data2 }); matrix.clear(); matrix.draw(heart); });
実行
$node index
上記コードを実行すると、このように…
コマンドの例
Genuino と通信中にコマンドを入力することで点灯状況を変化させることができます。
>> m.draw(test1);
>> m.draw(test2);
>> m.draw('C');
>> m.draw('M');
半角英数字と一部の記号を入力することも可能です。
>> m.clear();
すべて消灯されます。